package com.zs.letcode.hash_table;

import java.util.HashMap;
import java.util.Map;

/**
 * 同构字符串
 * 给定两个字符串s和t，判断它们是否是同构的。
 * <p>
 * 如果s中的字符可以按某种映射关系替换得到t，那么这两个字符串是同构的。
 * <p>
 * 每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。
 * <p>
 * <p>
 * <p>
 * 示例 1:
 * <p>
 * 输入：s = "egg", t = "add"
 * 输出：true
 * 示例 2：
 * <p>
 * 输入：s = "foo", t = "bar"
 * 输出：false
 * 示例 3：
 * <p>
 * 输入：s = "paper", t = "title"
 * 输出：true
 * <p>
 * <p>
 * 提示：
 * <p>
 * 可以假设s和 t 长度相同。
 * 相关标签
 * 哈希表
 * 字符串
 * <p>
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode-cn.com/leetbook/read/hash-table/xhjvbj/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 *
 * @author madison
 * @description
 * @date 2021/6/29 10:52
 */
public class Chapter8 {
    public static void main(String[] args) {

    }

    private static class Solution {
        /**
         * 方法一：哈希表
         */
        public boolean isIsomorphic(String s, String t) {
            Map<Character, Character> s2t = new HashMap<>();
            Map<Character, Character> t2s = new HashMap<>();
            int len = s.length();
            for (int i = 0; i < len; i++) {
                char x = s.charAt(i), y = t.charAt(i);
                if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x)) {
                    return false;
                }
                s2t.put(x, y);
                t2s.put(y, x);
            }
            return true;
        }
    }
}
